package org.pf.interfaces
{
	/**
	 * @author zeksa'
	 */
	
	import flash.display.Stage;
	import org.pf.interfaces.IPFSystemCache;
	import org.pf.constructor.PFConstructor;
	import org.pf.base.pfBlocks.PFCache;
	import org.pf.base.pfBlocks.PFCleaner;
	import org.pf.base.pfBlocks.PFController;
	import org.pf.base.pfBlocks.PFParticle;
	import org.pf.base.pfBlocks.PFState;
	import org.pf.base.pfBlocks.PFUpdater;
	
	/**
	 * The IPFPrince interface implemented by PFPrince object.
	 * Interface contains framework's basic function definitions.
	 */
	public interface IPFPrince
	{
		/**
		 * Starts framework, initializes cache, cleaner, constructor and updater.
		 * @param	stage	Flash stage object.
		 * @param	gWidth	Game width (not flash window).
		 * @param	gHeight	Game height (not flash window).
		 */
		function startup(stage:Stage, gWidth:int, gHeight:int):void;
		
		/**
		 * Tells framework to change current state in the game.
		 * Must be called after parameters for the next state have been added.
		 * They can be added with
		 * get_SystemCache().nextCache and get_SystemCache().nextState methods.
		 * You must use this function when you are creating first state of your game,
		 * "main menu" for example
		 */
		function changeState():void;
		
		/**
		 * Function returns interface to PFSystemCache object, which stores
		 * in-system information.
		 * @return IPFSystemCache interface.
		 */
		function get_SystemCache():IPFSystemCache;
		
		/**
		 * Function returns interface to PFSystemPool object, which stores
		 * information about registered controllers, particles, etc. objects
		 * in system.
		 * @return IPFSystemPool interface.
		 */
		function get_SystemPool():IPFSystemPool;
		
		/**
		 * Function returns interface to PFCleaner object, which is used to
		 * clear some of the framework's objects and data.
		 * @return IPFCleaner interface.
		 */
		function get_Cleaner():IPFCleaner;
		
		/**
		 * Function returns interface to PFUpdater object, which is used to
		 * update positions of b2d objects on the screen.
		 * @return IPFUpdater interface.
		 */
		function get_Updater():IPFUpdater;
		
		/**
		 * Function returns interface to PFConstructor object, which is used to
		 * construct in-game objects with physics, graphics, etc.
		 * @return IPFConstructor interface.
		 */
		function get_Constructor():IPFConstructor;
	}

}